[原创]zabbix4.4利用API实现web监控批量添加(完美版)

您所在的位置:网站首页 zabbixapi 批量添加监控项 [原创]zabbix4.4利用API实现web监控批量添加(完美版)

[原创]zabbix4.4利用API实现web监控批量添加(完美版)

2023-03-22 18:08| 来源: 网络整理| 查看: 265

2020/07/08更新:

修复一个BUG:1.因web监控名称不能大于64个字符。weblist.txt一行文字,如果大于64,文字说明会自动切割。

最近添加一些web监控,大伙都知道添加web监控需要先添加web页后,还得为每个web页配置触发器。如果监控数量多的话,用人工添加的方式。肯定是太费时了。所以上网找了一些资料,总结下来大概有三种方式1.用zabbix的API实现。2.直接往zabbix的数据库里写web监控项。3.利用zabbix的自动发现来实现。

权衡比较了一下,发现用api来实现算是比较方便的。(实际是我对python和shell很熟,实现起来比较方便)。参考了一下,这篇文章。发现有些地方还是不完善。所以自己用手修改了一下。对比原作者的python脚本,新增功能如下:1.能自定义监控网站说明。2.原脚本只有添加告警触发器,而没有恢复告警触发器。3.读取.txt文件,批量添加。

python正式代码如下:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#!/usr/bin/env python3# Author: 思想就是武器 https://zealot.top# Mail: [email protected] pyzabbix import ZabbixAPIimport sysfrom re import compile,IGNORECASEZABBIX_SERVER = ""USER = ""PASSWORD = ""HOSTNAME = ""def login(ZABBIX_SERVER,USER,PASSWORD): zapi = ZabbixAPI(ZABBIX_SERVER) zapi.login(USER,PASSWORD) return zapidef gethostid(auth,HOSTNAME): request = ZabbixAPI.do_request(auth, 'host.get', params={ "filter": {"host":HOSTNAME}}) if request['result']: return request['result'][0]['hostid'] else: print ("找不到该主机") sys.exit(1)def getapplicationid(auth,hostid): try: request = ZabbixAPI.do_request(auth, 'application.create', params={"name": "web监控","hostid": hostid}) except Exception as e: print(e) request = ZabbixAPI.do_request(auth, 'application.get', params={"hostids": hostid}) for num in range(0,len (request['result'])): if request['result'][num]['name'] == "web监控": return request['result'][num]['applicationid']def create_web_scenario(auth,URL,URL1,hostid,applicationid): request = ZabbixAPI.do_request(auth, 'httptest.get', params={ "filter": {"name": URL}}) if request['result']: print('该web监控已经添加过了' ) else: try: ZabbixAPI.do_request(auth, 'httptest.create',params={"name": URL,"hostid": hostid,"applicationid": applicationid, "delay": '60s',"retries": '3', "steps": [ { 'name': URL1, 'url': URL1, 'no': '1', 'status_codes': r'200'} ] } ) except Exception as e: print(e)def create_trigger(auth,HOSTNAME,URL,URL1): expression="{"+"{0}:web.test.fail[{1}].last()".format(HOSTNAME,URL)+"}"+"0" recovery_expression="{"+"{0}:web.test.fail[{1}].last()".format(HOSTNAME,URL)+"}"+"=0" try: ZabbixAPI.do_request(auth, 'trigger.create', params={"description": "{0}-WEB无法访问".format(URL),"expression": expression,"priority":"5","recovery_mode": "1","recovery_expression": recovery_expression}) except Exception as e: print(e)with open('weblist.txt','r') as f: for x in f.readlines(): URL=x URL1=URL.split(':',1)[1] if len(URL) > 64 : URL=URL.split(':',1)[0] auth = login(ZABBIX_SERVER,USER,PASSWORD) hostid = gethostid(auth,HOSTNAME) applicationid=getapplicationid(auth,hostid) create_web_scenario(auth,URL,URL1,hostid,applicationid) create_trigger(auth,HOSTNAME,URL,URL1)

使用方法:1.自行补齐,ZABBIX_SERVER,USER,PASSWORD,HOSTNAME这4个变量。2.在脚本目录下,新键weblist.txt文件.每行examples如下

1百度:http://www.baidu.com

3.更多API参数,可以参考zabbix官网说明



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3